Istio PeerAuthentication

개요

이스티오 내 서비스 간 인증 정책을 설정하는 리소스.
이를 통해 mTLS로 통신할 건지, 평문 통신할 건지 등의 요소를 정할 수 있다.
구체적으로는 요청을 받는 서버 측 리스너에 설정이 들어가는 것이기 때문에 mTLS를 할 때 만약 클라 측에서 인증 모드를 설정하고 싶다면 이스티오 데스티네이션룰을 설정해야 한다.

이스티오의 정책 관련 리소스가 대부분 그러한데, 정책의 적용 범위가 3가지로 나뉜다.

지역적인 설정일수록 우선순위가 더 높은 방식이고, 네임스페이스나 메시 단위 리소스는 해당 범위에 하나만 존재할 수 있다.
여러 개를 둔다고 해도 가장 오래된 것만 적용되는 방식이다.
워크로드 대상 정책 역시 여러 개가 매칭이 되는 케이스라면 오래된 정책이 적용된다.

양식 작성법

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: foo
spec:
  selector:
    matchLabels:
      app: finance
  mtls:
    mode: STRICT
  portLevelMtls:
    8080:
      mode: DISABLE

위의 필드가 전부이다.
selector로 워크로드를 라벨 셀렉터.
mtls에서 tls 세팅, portLevelMtls에서 포트 레벨 tls 설정을 한다.
(당연하지만 포트 레벨 tls는 서비스 포트가 아니라 워크로드 기준이다.)
포트 레벨 설정을 할 수 있다는 것에서 이게 엔보이의 리스너 필드에 설정되는 값이란 것을 쉽게 눈치챌 수 있다.
이스티오 데스티네이션룰에는 요청을 보내는 클라 측에서 tls 모드를 설정하는 것도 있는데, 이 둘이 상충되게 세팅하지 않도록 주의하자.
가령 클라측에서는 mtls하겠다고 했는데 여기에서 disable 하면 말짱 도루묵이다.

tls 모드는 다음과 같다.

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: "example-workload-policy"
  namespace: "foo"
spec:
  selector:
     matchLabels:
       app: example-app
  portLevelMtls:
    80:
      mode: DISABLE

UNSET의 예시를 들자면, 이건 워크로드의 80 포트에 대해서는 mtls를 비활성화한다.
그러나 foo 네임스페이스 단위의 정책이 따로 설정돼있다면 다른 포트들에 대해서는 해당 정책이 적용될 것이다.

관련 문서

이름 noteType created
5W - 이스티오 mTLS와 SPIFFE published 2025-05-11
5W - 이스티오 JWT 인증 published 2025-05-11
5W - 이스티오 인가 정책 설정 published 2025-05-11
E-istio-csr 사용 실습 topic/explain 2025-06-09
E-앰비언트 모드에서 메시 기능 활용 topic/explain 2025-06-07

참고